home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d12
/
asmbler.arc
/
APPLY.ASM
< prev
next >
Wrap
Assembly Source File
|
1988-11-19
|
5KB
|
364 lines
PAGE 55,132
TITLE QuadScreen APPLY program - Copyright 1983 Mathews Associates
BSIZE EQU 27408 ; SIZE OF QSI.BIN FILE AS SHOWN
; ; IN DISK DIRECTORY
;
; OFFSETS INTO QSI.BIN IMAGE
OXFONT EQU 0764H-0100H ; XFONT IN QSIMBED MODULE
OYFONT EQU OXFONT+10H ; YFONT IN QSIMBED MODULE
OULINE EQU OYFONT+10H ; ULINE IN QSIMBED MODULE
OCHSETS EQU OULINE+10H ; CHSETS IN QSIMBED MODULE
OBSIZE EQU OCHSETS+20H ; BSIZE IN QSIMBED MODULE
OPLAST EQU 016AH-0100H ; PLAST IN INSTALL MODULE
; General DOS invocation macro
DOS MACRO FNC,VAL,VBX,VCX,VDX,VSI,VDI
IFNB <VDI>
MOV DI,VDI
ENDIF
IFNB <VSI>
MOV SI,VSI
ENDIF
IFNB <VDX>
MOV DX,VDX
ENDIF
IFNB <VCX>
MOV CX,VCX
ENDIF
IFNB <VBX>
MOV BX,VBX
ENDIF
IFNB <VAL>
MOV AL,VAL
ENDIF
IFNB <FNC>
MOV AH,FNC
ENDIF
INT 33
ENDM
; Print string macro
PRINT MACRO STR
DOS 9,,,,<OFFSET STR>
ENDM
; Abort execution macro
HALT MACRO
PRINT FMSG
DOS 76,1
ENDM
DUMMY SEGMENT
IMAGE DB 65280 DUP (?)
DUMMY ENDS
STACK SEGMENT STACK
DW 4096 DUP (?)
STACK ENDS
PSP SEGMENT AT 0
ORG 080H
INLEN DB ?
INPUT LABEL BYTE
PSP ENDS
APPLY SEGMENT
ASSUME CS:APPLY,DS:PSP,ES:PSP
MAIN PROC NEAR
CALL IDENT
CALL LOAD
CALL BUILD
CALL SAVE
DOS 76,0
MAIN ENDP
IMSG DB 'Font installation program -'
DB ' Copyright 1983 Mathews Associates',13,10,'$'
HMSG DB 13,10,'APPLY should be used with a list'
DB ' of font files to be installed into a',13,10
DB 'QuadScreen driver given in order'
DB ' corresponding to mode number. I. e.',13,10
DB 'A>APPLY 12X20.STD+6X8.STD+7X9.STD'
DB '+USER1.FON+USER2.FON ...',13,10
DB 'with a limit of sixteen fonts and'
DB ' 64K total driver size. Font files may',13,10
DB 'be created and edited by FONTEDIT.',13,10,'$'
EMSG1 DB 'Cannot find file QSI.BIN$'
EMSG2 DB 'Error opening file QSI.BIN$'
EMSG3 DB 'File QSI.BIN is invalid$'
EMSG4 DB 'Cannot find file $'
EMSG5 DB 'Error opening file $'
EMSG6 DB 'Invalid font file $'
EMSG7 DB 'Address space overflow$'
EMSG8 DB 'Cannot create file QSI.COM$'
FMSG DB ' - APPLY aborted.',13,10,'$'
INNAME DB 'QSI.BIN',0
OUTNAME DB 'QSI.COM',0
NEWNAME DB 64 DUP (?)
SEGPSP DW ?
XFONT DB ?
YFONT DB ?
INDEX DB ?
NEXTSI DW ?
NEXTCX DW ?
TSIZE DW ?
CSIZE DW ?
IDENT PROC NEAR
MOV AX,CS
MOV DS,AX
MOV AX,ES
MOV SEGPSP,AX
ASSUME DS:APPLY,ES:NOTHING
PRINT IMSG
RET
IDENT ENDP
; Load the file QSI.BIN into memory
LOAD PROC NEAR
DOS 61,0,,,<OFFSET INNAME>
JNC LOAD2
CMP AX,2
JNZ LOAD1
PRINT EMSG1
HALT
LOAD1:
PRINT EMSG2
HALT
LOAD2:
PUSH DS
MOV DX,SEG DUMMY
MOV DS,DX
XOR DX,DX
DOS 63,,AX,BSIZE+1
POP DS
JC LOAD1
CMP AX,BSIZE
JZ LOAD3
PRINT EMSG3
HALT
LOAD3:
DOS 62
JC LOAD1
MOV AX,BSIZE
MOV CSIZE,AX
RET
LOAD ENDP
; Attach the fonts given to memory image
BUILD PROC NEAR
MOV AX,SEGPSP
MOV DS,AX
MOV AX,CS
MOV ES,AX
ASSUME DS:PSP,ES:APPLY
MOV CL,INLEN
OR CL,CL
JZ BULD2
XOR CH,CH
MOV SI,OFFSET INPUT
BULD1:
CLD
CMP BYTE PTR [SI],' '
JNZ BULD3
INC SI
LOOP BULD1
BULD2:
MOV AX,CS
MOV DS,AX
ASSUME DS:APPLY
PRINT HMSG
DOS 76,1
ASSUME DS:PSP
BULD3:
MOV DI,OFFSET NEWNAME
BULD4:
CLD
LODSB
DEC CX
CMP AL,'+'
JZ BULD5
STOSB
JCXZ BULD5
JMP BULD4
BULD5:
MOV BYTE PTR ES:[DI],0
MOV AX,SEGPSP
MOV ES,AX
MOV AX,CS
MOV DS,AX
ASSUME DS:APPLY,ES:PSP
MOV NEXTSI,SI
MOV NEXTCX,CX
DOS 61,0,,,<OFFSET NEWNAME>
JNC BULD7
CMP AX,2
JNZ BULD6
PRINT EMSG4
CALL PRNAME
HALT
BULD6:
PRINT EMSG5
CALL PRNAME
HALT
BULD7:
DOS 63,,AX,1,<OFFSET XFONT>
JNC BULD9
CMP AX,1
JZ BULD9
BULD8:
PRINT EMSG6
CALL PRNAME
HALT
BULD9:
CMP XFONT,32
JA BULD8
DOS 63,,,1,<OFFSET YFONT>
JC BULD8
CMP AX,1
JNZ BULD8
CMP YFONT,32
JZ BULD8
MOV AL,XFONT
ADD AL,7
MOV CL,3
SHR AL,CL
MUL YFONT
MOV AH,AL
XOR AL,AL
MOV TSIZE,AX
PUSH DS
MOV DX,CSIZE
MOV CX,SEG DUMMY
MOV DS,CX
DOS 63,,,AX
POP DS
JC BULD8
CMP AX,TSIZE
JNZ BULD8
MOV AX,SEG DUMMY
MOV ES,AX
ASSUME ES:DUMMY
MOV BL,INDEX
XOR BH,BH
MOV AL,XFONT
MOV IMAGE[BX+OXFONT],AL
MOV AL,YFONT
MOV IMAGE[BX+OYFONT],AL
MOV CL,16
MUL CL
ADD AX,12
MOV CL,20
DIV CL
MOV IMAGE[BX+OULINE],AL
SHL BX,1
MOV AX,CSIZE
ADD AX,0100H
MOV WORD PTR IMAGE[BX+OCHSETS],AX
MOV AX,TSIZE
MOV WORD PTR IMAGE[BX+OBSIZE],AX
ADD CSIZE,AX
JNC BULD10
PRINT EMSG7
HALT
BULD10:
MOV CX,NEXTCX
JCXZ BULD11
INC INDEX
MOV SI,NEXTSI
MOV AX,SEGPSP
MOV DS,AX
MOV AX,CS
MOV ES,AX
JMP BULD3
BULD11:
MOV AX,CSIZE
MOV WORD PTR IMAGE+OPLAST,AX
RET
ASSUME ES:NOTHING
BUILD ENDP
; Save the file QSI.COM from memory
SAVE PROC NEAR
DOS 60,,,0,<OFFSET OUTNAME>
JNC SAVE2
SAVE1:
PRINT EMSG8
HALT
SAVE2:
PUSH DS
MOV CX,CSIZE
MOV DX,SEG DUMMY
MOV DS,DX
XOR DX,DX
DOS 64,,AX
POP DS
JC SAVE1
DOS 62
JC SAVE1
RET
SAVE ENDP
PRNAME PROC NEAR
MOV SI,OFFSET NEWNAME
PRNM1:
CLD
LODSB
OR AL,AL
JZ PRNM2
MOV DL,AL
PUSH SI
DOS 2
POP SI
JMP PRNM1
PRNM2:
RET
PRNAME ENDP
APPLY ENDS
END MAIN